package com.lin.app.singletonDemo;

// 什么是单例设计模式---> 保证一个类只有一个实例，并提供一个全局访问点（节省内存开销）
// 2种方式:
// 饿汉（急）在类加载的时候就会创建 没有多线程竞争 线程安全
// 懒汉（懒） 有些对象大 等用到的时候再实例化  线程不安全--->双重检查锁DCL（double-checked locking）
public class Bean {

    private static Bean bean; // = new Bean(); // 饿汉

    // synchronized应该怎么加 锁什么？
    // 锁 只锁临界资源= 多线程的竞争资源
    public static Bean getBean() {
        // 业务代码...
        // 业务代码...
        // 业务代码...

        if(bean!=null) {
            return bean;
        }
        synchronized (bean) {
            if(bean!=null) {
                return bean;
            }

            bean = new Bean();
        }

        return bean;
    }
}
